/*
 * @Description:
 * @Version: 2.0
 * @Autor: wiz
 * @Date: 2023-08-02 10:51:01
 * @LastEditors: zss
 * @LastEditTime: 2024-05-11 14:22:33
 */
import {
  ColumnAlign,
  ColumnCellRenderOptions,
  ColumnCellRenderParams,
  ColumnContentRenderOptions,
  ColumnEditRenderOptions,
  ColumnExportCellRenderParams,
  ColumnExportFooterRenderParams,
  ColumnExportHeaderRenderParams,
  ColumnFilterMethodParams,
  ColumnFilterOption,
  ColumnFilterRenderOptions,
  ColumnFixed,
  // ColumnFooterRenderParams,
  ColumnFormatterMethodParams,
  ColumnInfo,
  RecordInfo,
  RowInfo,
  TableOptions,
  TableOverflow,
  TableRenderParams
} from 'vxe-table/types';

import Vue from 'vue';

namespace N_oBaseGridPlus {
  /**
   * 表头渲染参数
   */
  export interface ColumnHeaderRenderParams extends TableRenderParams {
    /**
     * 列对象
     */
    column: ColumnInfo;
    /**
     * 相对于 columns 中的索引
     */
    columnIndex: number;
    /**
     * 相对于可视区渲染中的列索引
     */
    $columnIndex: number;
    /**
     * 相对于表头行数据的索引
     */
    $rowIndex: number;
  }
  export interface I_column {
    /**
     * 渲染类型
     */
    type?: 'seq' | 'radio' | 'checkbox' | 'expand' | 'html';
    /**
     * 列字段名
     */
    field?: string;
    /**
     * 列标题
     */
    title?: string;
    /**
     * 列宽度
     */
    width?: number | string;
    /**
     * 列最小宽度，把剩余宽度按比例分配
     */
    minWidth?: number | string;
    maxWidth?: number | string;
    /**
     * 是否允许拖动列宽调整大小
     */
    resizable?: boolean;
    /**
     * 将列固定在左侧或者右侧
     */
    fixed?: ColumnFixed;
    /**
     * 列对其方式
     */
    align?: ColumnAlign;
    /**
     * 表头对齐方式
     */
    headerAlign?: ColumnAlign;
    /**
     * 表尾列的对齐方式
     */
    footerAlign?: ColumnAlign;
    /**
     * 当内容过长时显示为省略号
     */
    showOverflow?: TableOverflow;
    /**
     * 当表头内容过长时显示为省略号
     */
    showHeaderOverflow?: TableOverflow;
    /**
     * 当表尾内容过长时显示为省略号
     */
    showFooterOverflow?: TableOverflow;
    /**
     * 给单元格附加 className
     */
    className?:
      | string
      | ((
          params: ColumnCellRenderParams
        ) => string | any[] | { [key: string]: boolean });
    /**
     * 给表头单元格附加 className
     */
    headerClassName?:
      | string
      | ((
          params: ColumnHeaderRenderParams
        ) => string | any[] | { [key: string]: boolean });
    /**
     * 给表尾单元格附加 className
     */
    footerClassName?:
      | string
      | ((params: any) => string | any[] | { [key: string]: boolean });
    /**
     * 格式化显示内容
     */
    formatter?:
      | ((params: ColumnFormatterMethodParams) => string)
      | any[]
      | string;
    /**
     * 是否允许排序
     */
    sortable?: boolean;
    /**
     * 是否服务端排序
     */
    remoteSort?: boolean;
    /**
     * 自定义排序的属性
     */
    sortBy?: string | string[];
    /**
     * 自定义排序方法
     */
    sortMethod?(a: any, b: any): boolean;
    /**
     * 配置筛选条件数组
     */
    filters?: ColumnFilterOption[];
    /**
     * 筛选是否允许多选
     */
    filterMultiple?: boolean;
    /**
     * 自定义筛选方法
     */
    filterMethod?(params: ColumnFilterMethodParams): boolean;
    /**
     * 筛选模板配置项
     */
    filterRender?: ColumnFilterRenderOptions;
    /**
     * 指定为树节点
     */
    treeNode?: boolean;
    /**
     * 是否可视
     */
    visible?: boolean;
    headerExportMethod?(
      params: ColumnExportHeaderRenderParams
    ): string | number;
    /**
     * 自定义单元格数据导出方法
     */
    exportMethod?(params: ColumnExportCellRenderParams): string | number;
    /**
     * 自定义表尾单元格数据导出方法
     */
    footerExportMethod?(
      params: ColumnExportFooterRenderParams
    ): string | number;
    /**
     * 单元格值类型
     */
    cellType?: string;
    /**
     * 单元格渲染配置项
     */
    cellRender?: ColumnCellRenderOptions;
    /**
     * 单元格编辑渲染配置项
     */
    editRender?: ColumnEditRenderOptions;
    /**
     * 内容渲染配置项
     */
    contentRender?: ColumnContentRenderOptions;
    /**
     * 额外的参数
     */
    params?: any;
  }
  export interface I_columnInfo extends ColumnInfo {}
  export interface I_rowInfo extends RowInfo {}
  export interface I_recordInfo extends RecordInfo {}
  export interface I_tableOption extends TableOptions {
    columns: Array<I_column>;
  }
  export interface I_conf {
    tableName: string;
    autoLoad: boolean;
    columns: Array<I_column>;
  }
  export declare interface oBaseGridPlus extends Vue {
    G_gridOptions: N_oBaseGridPlus.I_tableOption;
    G_data: Array<any>;
    G_grid: any;
    config: I_conf;
    /*
    获取数据
    */

    getData(): Array<any>;
    /*
    加载数据
    */
    loadData();
  }
}

export { N_oBaseGridPlus };
